/** 消息类型 */
export type MessageType = 'text' | 'image' | 'contact_request' | 'contact_response';

/** 消息状态，用于前端展示和管理 */
export type MessageStatus = 'sending' | 'success' | 'fail' | 'revoked';

/** 用户信息接口 */
export interface IUserInfo {
  uid: string;
  nickname: string;
  avatar: string;
}
export interface IContactRequestBody {
  requestType: 'phone' | 'wx';
  text: string;
}
export interface IPeerContact {
  phoneNumber: string | boolean; // string: 号码, true: 有但未索取, false: 未设置
  wx: IPeerWxContact | boolean; // object: 微信信息, true: 有但未索取, false: 未设置
}
export interface IPeerWxContact {
  wx_id?: string;
  qr_code?: string;
}
/** 消息实体接口 */
export interface IMessage {
  msg_id: string; // 消息ID，由后端生成
  conversation_id: string; // 所属会话ID
  from_uid: string; // 发送者用户ID
  to_uid: string; // 接收者用户ID
  type: MessageType; // 消息类型 'text' | 'image'
  body: string; // 消息内容：文本内容或图片URL
  createTime: number; // 消息创建时间戳 (毫秒)
  status: MessageStatus; // 消息状态：'sending', 'success', 'fail', 'revoked'
  isMyMessage: boolean; // 标记是否是当前用户发送的消息，便于UI渲染
  canRevoke?: boolean; // 标记该消息是否可撤回 (前端业务逻辑控制，例如：只能撤回自己的消息，且非打招呼未回应状态)
  // 额外增加，方便UI展示发送者信息 (后端多表查询提供)
  from_nickname?: string;
  parsedBody?: IContactRequestBody;
  requestStatus?: 'pending' | 'approved' | 'denied';
  isHandled?: boolean;
  from_avatar?: string;
}

/** 会话实体接口 */
export interface IConversation {
  conversation_id: string; // 会话ID
  peer_uid: string; // 对方用户ID (对于系统消息，这是伪用户ID，如 'system_notice')
  peer_nickname: string; // 对方昵称 (或系统通知名称，如 "订单消息")
  peer_avatar: string; // 对方头像URL (或系统通知图标URL)
  lastMessage?: IMessage; // 最新一条消息的预览
  unreadCount: number; // 未读消息数
  updateTime: number; // 会话的最后更新时间，通常是最后一条消息的时间
  isSystemConversation: boolean; // 标记是否是系统会话
  isBlockedByMe?: boolean; // 标记当前用户是否已拉黑对方
  isVirtualPeer?: boolean; // 新增：对方是否是虚拟用户
  peerContact?: IPeerContact;
}

/** 打招呼状态接口，后端返回 */
export interface IGreetingStatus {
  isGreetingPending: boolean; // true 表示当前会话处于 "打招呼未回应" 状态
  // 可以在这里添加其他与打招呼机制相关的字段，例如冷却时间等
}

/** 会话详情接口 (用于聊天页面获取会话双方信息，此接口现在可能不那么必要了) */
export interface IConversationDetail {
  conversation_id: string;
  my_info: IUserInfo; // 当前用户的信息
  peer_info: IUserInfo; // 对方用户的信息
  isBlockedByMe: boolean; // 是否被我拉黑
  greeting_status?: IGreetingStatus; // 打招呼状态 (如果后端在获取会话详情时就提供)
}
